package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.UacEmp;
import com.csun.cmny.provider.model.domain.UacUser;
import com.csun.cmny.provider.model.dto.dept.EmpLifeDto;
import com.csun.cmny.provider.model.dto.dept.EmpQueryDto;
import com.csun.cmny.provider.model.dto.emp.UacEditEmpDto;
import com.csun.cmny.provider.model.dto.life.UacLifeDto;
import com.csun.cmny.provider.model.vo.EmpVo;
import com.csun.cmny.provider.model.vo.LifeEmpVo;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2018-12-13 15:02
 * @Description:
 */
public interface UacEmpService extends IService<UacEmp> {

    /**
     * 根据deptId查询员工信息
     *
     * @param deptId 部门Id
     * @return  员工列表
     */
    List<EmpVo> getEmpByDeptId(Long deptId);

    /**
     * 校验部门是否有员工
     *
     * @param deptId 部门Id
     * @return  校验结果
     */
    boolean checkDeptHasEmp(Long deptId);

    /**
     * 添加员工
     *
     * @param uacEditEmpDto 员工信息
     * @return 影响条数
     */
    int addUacEmp(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);

    /**
     * 编辑员工
     *
     * @param uacEditEmpDto 员工信息
     * @return 影响条数
     */
    int editUacEmp(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);

    /**
     * 根据用户Id删除员工信息
     *
     * @param userId 用户Id
     * @return 影响条数
     */
    int deleteUacEmpByUserId(Long userId);

    /**
     * 根据userId查询员工信息
     *
     * @param userId 用户Id
     * @return 员工信息
     */
    EmpVo getUacEmpByUserId(Long userId);

    /**
     * 查询员工信息列表 - 分页
     *
     * @param empQueryDto
     * @return
     */
    PageInfo queryEmpListWithPage(EmpQueryDto empQueryDto);

    /**
     * 根据身份证设置年龄, 性别信息
     *
     * @param uacUser
     */
    void setIdCard(UacUser uacUser);

    /**
     * 添加员工(带角色)
     *
     * @param uacEditEmpDto 员工信息
     * @return 影响条数
     */
    int addUacEmpWithRole(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);

    /**
     * 查询员工信息列表 - 分页
     *
     * @param empQueryDto
     * @return
     */
    PageInfo queryUserListByEmpWithPage(EmpQueryDto empQueryDto);

    /**
     * 查询员工信息列表 - 分页(多角色)
     *
     * @param empQueryDto
     * @return
     */
    PageInfo selectUserListByEmpWithPage(EmpQueryDto empQueryDto);

    /**
     * 根据deptId查询员工信息(带角色)
     *
     * @param deptId 部门Id
     * @return  员工列表
     */
    List<EmpVo> getEmpByDeptIdWithRole(Long deptId);

    /**
     * 编辑员工(带角色)
     *
     * @param uacEditEmpDto 员工信息
     * @return 影响条数
     */
    int editUacEmpWithRole(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);

    /**
     * 根据userId查询员工信息(带角色)
     *
     * @param userId 用户Id
     * @return 员工信息
     */
    EmpVo getUacEmpWithRoleByUserId(Long userId);

    /**
     * 根据用户Id删除员工信息(带角色)
     *
     * @param userId 用户Id
     * @return 影响条数
     */
    int deleteUacEmpWithRoleByUserId(Long userId);

    PageInfo queryUserListByEmpWithLife(EmpLifeDto empLifeDto);

    /**
     * 添加life工作人员信息
     */
    int addLifeUser(UacLifeDto uacLifeDto, LoginAuthDto loginAuthDto);

    /**
     * 根据用户Id删除life工作人员
     * @param userId 用户Id
     * @return 影响条数
     */
    int deleteLifeByUserId(Long userId);

    /**
     * 查询life工作人员详情
     * @param userId
     * @return
     */
    LifeEmpVo selectLifeUser(Long userId);

    /**
     * 修改工作人员
     * @param uacLifeDto
     * @return 影响条数
     */
    Integer updateLifeUser(UacLifeDto uacLifeDto,LoginAuthDto loginAuthDto);

    int addUacEmpWithRoles(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);

    int editUacEmpWithRoles(UacEditEmpDto uacEditEmpDto, LoginAuthDto loginAuthDto);
}
